home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 November / Macworld (1999-11).dmg / Updaters / WhiteCap 3.0.4 / WhiteCap Source.sit / WhiteCap Source / Common / General Tools / XStrList.cpp < prev    next >
C/C++ Source or Header  |  1999-07-13  |  3KB  |  166 lines

  1. #include "XStrList.h"
  2.  
  3.  
  4. XStrList::XStrList( XStrListOptsT inOption, ListOrderingT inOrdering ) :
  5.     mStrings( inOrdering ) {
  6.     
  7.     mStrListOption = inOption;
  8.     
  9.     bool lowToHigh = inOrdering == cSortLowToHigh;
  10.     
  11.     if ( inOrdering == cSortLowToHigh || inOrdering == cSortHighToLow ) {
  12.         if ( mStrListOption == cNoDuplicates_CaseInsensitive )
  13.             mStrings.SetCompFcn( sStrComparitorCI, lowToHigh );
  14.         else
  15.             mStrings.SetCompFcn( sStrComparitor, lowToHigh );
  16.     }
  17. }
  18.  
  19.  
  20.  
  21. XStrList::~XStrList() {
  22.  
  23.     RemoveAll();
  24. }
  25.  
  26.  
  27.  
  28. void XStrList::RemoveAll() {
  29.     int            i = 1;
  30.     UtilStr*    str;
  31.     
  32.     while ( mStrings.Fetch( i, (void**) &str ) ) {
  33.         delete str;
  34.         i++;
  35.     }
  36.     mStrings.RemoveAll();
  37. }
  38.  
  39.  
  40. void XStrList::Remove( long inIndex ) {
  41.     UtilStr*    str;
  42.     
  43.     if ( mStrings.Fetch( inIndex, (void**) &str ) )
  44.         delete str;
  45.     
  46.     mStrings.RemoveElement( inIndex );
  47. }
  48.  
  49.  
  50. long XStrList::Add( const void* inData, long inLen ) {
  51.     UtilStr* s        = new UtilStr( inData, inLen );
  52.     bool     doAdd    = true;
  53.     
  54.     if ( mStrListOption != cDuplicatesAllowed ) 
  55.         doAdd = FindIndexOf( *s ) == 0;
  56.     
  57.     if ( doAdd )
  58.         return mStrings.Add( s );
  59.     else {
  60.         delete s;    
  61.         return 0;
  62.     }
  63. }
  64.  
  65.  
  66.  
  67. long XStrList::Add( const char* inStr ) {
  68.     UtilStr* s        = new UtilStr( inStr );
  69.     bool     doAdd    = true;
  70.     
  71.     if ( mStrListOption != cDuplicatesAllowed ) 
  72.         doAdd = FindIndexOf( *s ) == 0;
  73.     
  74.     if ( doAdd ) 
  75.         return mStrings.Add( s );
  76.     else {
  77.         delete s;
  78.         return 0;
  79.     }
  80. }
  81.  
  82.  
  83.  
  84. long XStrList::Add( const UtilStr& inStr ) {
  85.     bool doAdd = true;
  86.     
  87.     if ( mStrListOption != cDuplicatesAllowed ) 
  88.         doAdd = FindIndexOf( inStr ) == 0;
  89.     
  90.     if ( doAdd )
  91.         return mStrings.Add( new UtilStr( inStr ) );
  92.     else
  93.         return 0;
  94. }
  95.         
  96.         
  97.  
  98.  
  99. long XStrList::FindIndexOf( const char* inStr ) const {
  100.     bool            caseSens    = mStrListOption != cNoDuplicates_CaseInsensitive;
  101.     static UtilStr    sTemp;
  102.     int                i = 1;
  103.     UtilStr*        str;
  104.     
  105.     if ( mStrings.mCompFcn ) {
  106.         sTemp.Assign( inStr );
  107.         return FindIndexOf( sTemp ); }
  108.     else {
  109.         while ( mStrings.Fetch( i, (void**) &str ) ) {
  110.             if ( str -> compareTo( inStr, caseSens ) == 0 )
  111.                 return i;
  112.             i++;
  113.         }
  114.     }
  115.     
  116.     return 0;
  117. }
  118.  
  119.  
  120. long XStrList::FindIndexOf( const UtilStr& inStr ) const {
  121.     int            i = 1;
  122.     UtilStr*    str;
  123.     bool        caseSens    = mStrListOption != cNoDuplicates_CaseInsensitive;
  124.     
  125.     if ( mStrings.mCompFcn ) {
  126.         i = mStrings.FetchPredIndex( &inStr ) + 1;
  127.         if ( mStrings.Fetch( i, (void**) &str ) ) {
  128.             if ( str -> compareTo( &inStr, caseSens ) == 0 )
  129.                 return i;
  130.         } }
  131.     else
  132.         return FindIndexOf( inStr.getCStr() );
  133.     
  134.     return 0;
  135. }
  136.  
  137.  
  138.  
  139. bool XStrList::Fetch( long inIndex, UtilStr& outStr ) const {
  140.     UtilStr*    str;
  141.     
  142.     if ( mStrings.Fetch( inIndex, (void**) &str ) ) {
  143.         outStr.Assign( str );
  144.         return true; }
  145.     else
  146.         return false;
  147. }
  148.  
  149.  
  150. const UtilStr* XStrList::Fetch( long inIndex ) const {
  151.     return (UtilStr*) mStrings.Fetch( inIndex );
  152. }
  153.  
  154.  
  155.  
  156.  
  157.  
  158. int XStrList::sStrComparitor( const void* inA, const void* inB ) {
  159.     return ( (UtilStr*) inA ) -> compareTo( (UtilStr*) inB, true );
  160. }
  161.  
  162. int XStrList::sStrComparitorCI( const void* inA, const void* inB ) {
  163.     return ( (UtilStr*) inA ) -> compareTo( (UtilStr*) inB, false );
  164. }
  165.  
  166.